﻿''' <summary>
''' Добавляет методам действия, отдающим в представление модель данных <see cref="Page" />, передавать в это же представление дополнительные динамические данные: заголовок страницы, ссылка на редактирование страницы.
''' </summary>
''' <remarks></remarks>
<AttributeUsage(AttributeTargets.Class Or AttributeTargets.Method, AllowMultiple:=False, Inherited:=True)>
Public NotInheritable Class PageActionAttribute
    Inherits ActionFilterAttribute

    Public Overrides Sub OnActionExecuted(filterContext As ActionExecutedContext)
        MyBase.OnActionExecuted(filterContext)

        Dim actionName As String = filterContext.ActionDescriptor.ActionName
        Dim controllerName As String = filterContext.ActionDescriptor.ControllerDescriptor.ControllerName

        Dim result As ViewResult = filterContext.Result
        Dim data As ViewDataDictionary = result.ViewData
        Dim page As Page = result.Model

        data.Add("Title", page.Title)
        data.Add("Message", "Страница находится в разработке.")

        Dim rvd As New RouteValueDictionary()
        rvd.Add("controller", controllerName.ToLower)
        rvd.Add("action", actionName.ToLower)

        data.Add("EditUrl", VirtualPathUtility.ToAbsolute(String.Format("~/pages/admin/edit/{0}?returnUrl={1}", page.Id.ToString, VirtualPathUtility.ToAbsolute("~/" & filterContext.RouteData.Route.GetVirtualPath(filterContext.RequestContext, rvd).VirtualPath))))
    End Sub

End Class
